package com.dzsw.shiro.base;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;

public class ShiroBase {

    protected void login(String inipath, String uname, String upwd) throws Exception {
        //1、获取SecurityManager工厂，此处使用Ini配置文件初始化SecurityManager
        Factory<SecurityManager> factory = new IniSecurityManagerFactory(inipath);
        //2、得到SecurityManager实例 并绑定给SecurityUtils
        SecurityManager securityManager = factory.getInstance();
        SecurityUtils.setSecurityManager(securityManager);
        //3、得到Subject及创建用户名/密码身份验证Token（即用户身份/凭证）
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken(uname, upwd);
        try {
            //4、登录，即身份验证
            subject.login(token);
            System.out.println("success");
        } catch (AuthenticationException e) {
            //5、身份验证失败
            System.out.println("fault");
            throw e;
        }
    }

    protected Subject subject() {
        Subject subject = SecurityUtils.getSubject();
        return subject;
    }

    protected void logout() {
        System.out.println("prepare logout");
        SecurityUtils.getSubject().logout();
    }
}
